home *** CD-ROM | disk | FTP | other *** search
/ Merciful 2 / Merciful - Disc 2.iso / software / m / maxonc++2.dms / maxonc++2.adf / MCPIncl.lha / intuition / intuition.h < prev    next >
C/C++ Source or Header  |  1992-01-26  |  29KB  |  890 lines

  1. #ifndef INTUITION_INTUITION_H
  2. #define INTUITION_INTUITION_H TRUE
  3. /*
  4. **  $Filename: intuition/intuition.h $
  5. **  $Release: 2.04 $
  6. **  $Revision: 36.49 $
  7. **  $Date: 91/02/22 $
  8. **  Interface definitions for Intuition applications.
  9. **  (C) Copyright 1985,1986,1987,1988,1989,1990 Commodore-Amiga, Inc.
  10. **     All Rights Reserved
  11. */
  12. // gestrippt von Jens Gelhar 27.01.92
  13.  
  14. #ifndef EXEC_TYPES_H
  15. #include <exec/types.h>
  16. #endif
  17.  
  18. #ifndef GRAPHICS_GFX_H
  19. #include <graphics/gfx.h>
  20. #endif
  21.  
  22. #ifndef GRAPHICS_CLIP_H
  23. #include <graphics/clip.h>
  24. #endif
  25.  
  26. #ifndef GRAPHICS_VIEW_H
  27. #include <graphics/view.h>
  28. #endif
  29.  
  30. #ifndef GRAPHICS_RASTPORT_H
  31. #include <graphics/rastport.h>
  32. #endif
  33.  
  34. #ifndef GRAPHICS_LAYERS_H
  35. #include <graphics/layers.h>
  36. #endif
  37.  
  38. #ifndef GRAPHICS_TEXT_H
  39. #include <graphics/text.h>
  40. #endif
  41.  
  42. #ifndef EXEC_PORTS_H
  43. #include <exec/ports.h>
  44. #endif
  45.  
  46. #ifndef DEVICES_INPUTEVENT_H
  47. #include <devices/inputevent.h>
  48. #endif
  49.  
  50. #ifndef UTILITY_TAGITEM_H
  51. #include <utility/tagitem.h>
  52. #endif
  53.  
  54. struct Menu
  55. {
  56.     struct Menu *NextMenu;
  57.     WORD LeftEdge, TopEdge;
  58.     WORD Width, Height;
  59.     UWORD Flags;
  60.     BYTE *MenuName;
  61.     struct MenuItem *FirstItem;
  62.     WORD JazzX, JazzY, BeatX, BeatY;
  63. };
  64.  
  65. #define MENUENABLED 0x0001
  66. #define MIDRAWN 0x0100
  67.  
  68.  
  69. struct MenuItem
  70. {
  71.     struct MenuItem *NextItem; /* pointer to next in chained list */
  72.     WORD LeftEdge, TopEdge; /* position of the select box */
  73.     WORD Width, Height;  /* dimensions of the select box */
  74.     UWORD Flags;  /* see the defines below */
  75.  
  76.     LONG MutualExclude;  /* set bits mean this item excludes that */
  77.  
  78.     APTR ItemFill;  /* points to Image, IntuiText, or NULL */
  79.  
  80.     /* when this item is pointed to by the cursor and the items highlight
  81.      * mode HIGHIMAGE is selected, this alternate image will be displayed
  82.      */
  83.     APTR SelectFill;  /* points to Image, IntuiText, or NULL */
  84.  
  85.     BYTE Command;  /* only if appliprog sets the COMMSEQ flag */
  86.  
  87.     struct MenuItem *SubItem; /* if non-zero, points to MenuItem for submenu */
  88.  
  89.     /* The NextSelect field represents the menu number of next selected
  90.      * item (when user has drag-selected several items)
  91.      */
  92.     UWORD NextSelect;
  93. };
  94.  
  95.  
  96. /* FLAGS SET BY THE APPLIPROG */
  97. #define CHECKIT  0x0001 /* set to indicate checkmarkable item */
  98. #define ITEMTEXT 0x0002 /* set if textual, clear if graphical item */
  99. #define COMMSEQ  0x0004 /* set if there's an command sequence */
  100. #define MENUTOGGLE 0x0008 /* set for toggling checks (else mut. exclude) */
  101. #define ITEMENABLED 0x0010 /* set if this item is enabled */
  102.  
  103. /* these are the SPECIAL HIGHLIGHT FLAG state meanings */
  104. #define HIGHFLAGS 0x00C0 /* see definitions below for these bits */
  105. #define HIGHIMAGE 0x0000 /* use the user's "select image" */
  106. #define HIGHCOMP 0x0040 /* highlight by complementing the selectbox */
  107. #define HIGHBOX  0x0080 /* highlight by "boxing" the selectbox */
  108. #define HIGHNONE 0x00C0 /* don't highlight */
  109.  
  110. /* FLAGS SET BY BOTH APPLIPROG AND INTUITION */
  111. #define CHECKED 0x0100 /* state of the checkmark */
  112.  
  113. /* FLAGS SET BY INTUITION */
  114. #define ISDRAWN  0x1000 /* this item's subs are currently drawn */
  115. #define HIGHITEM 0x2000 /* this item is currently highlighted */
  116. #define MENUTOGGLED 0x4000 /* this item was already toggled */
  117.  
  118.  
  119. struct Requester
  120. {
  121.     struct Requester *OlderRequest;
  122.     WORD LeftEdge, TopEdge;  /* dimensions of the entire box */
  123.     WORD Width, Height;   /* dimensions of the entire box */
  124.     WORD RelLeft, RelTop;  /* for Pointer relativity offsets */
  125.  
  126.     struct Gadget *ReqGadget;  /* pointer to a list of Gadgets */
  127.     struct Border *ReqBorder;  /* the box's border */
  128.     struct IntuiText *ReqText;  /* the box's text */
  129.     UWORD Flags;   /* see definitions below */
  130.  
  131.     /* pen number for back-plane fill before draws */
  132.     UBYTE BackFill;
  133.     /* Layer in place of clip rect */
  134.     struct Layer *ReqLayer;
  135.  
  136.     UBYTE ReqPad1[32];
  137.     struct BitMap *ImageBMap; /* points to the BitMap of PREDRAWN imagery */
  138.     struct Window *RWindow; /* added.  points back to Window */
  139.  
  140.     struct Image  *ReqImage; /* new for V36: drawn if USEREQIMAGE set */
  141.  
  142.     UBYTE ReqPad2[32];
  143. };
  144.  
  145.  
  146. /* FLAGS SET BY THE APPLIPROG */
  147. #define POINTREL 0x0001
  148.      /* if POINTREL set, TopLeft is relative to pointer
  149.       * for DMRequester, relative to window center
  150.       * for Request().
  151.       */
  152. #define PREDRAWN 0x0002
  153.  /* set if Requester.ImageBMap points to predrawn Requester imagery */
  154. #define NOISYREQ 0x0004
  155.  /* if you don't want requester to filter input    */
  156. #define SIMPLEREQ 0x0010
  157.  /* to use SIMPLEREFRESH layer (recommended) */
  158.  
  159. /* New for V36  */
  160. #define USEREQIMAGE 0x0020
  161.  /*  render linked list ReqImage after BackFill
  162.   * but before gadgets and text
  163.   */
  164. #define NOREQBACKFILL 0x0040
  165.  /* don't bother filling requester with Requester.BackFill pen */
  166.  
  167.  
  168. /* FLAGS SET BY INTUITION */
  169. #define REQOFFWINDOW 0x1000 /* part of one of the Gadgets was offwindow */
  170. #define REQACTIVE 0x2000 /* this requester is active */
  171. #define SYSREQUEST 0x4000 /* this requester caused by system */
  172. #define DEFERREFRESH 0x8000 /* this Requester stops a Refresh broadcast */
  173.  
  174.  
  175. struct Gadget
  176. {
  177.     struct Gadget *NextGadget; /* next gadget in the list */
  178.  
  179.     WORD LeftEdge, TopEdge; /* "hit box" of gadget */
  180.     WORD Width, Height;  /* "hit box" of gadget */
  181.  
  182.     UWORD Flags;  /* see below for list of defines */
  183.  
  184.     UWORD Activation;  /* see below for list of defines */
  185.  
  186.     UWORD GadgetType;  /* see below for defines */
  187.  
  188.     APTR GadgetRender;
  189.  
  190.     APTR SelectRender;
  191.  
  192.     struct IntuiText *GadgetText;   /* text for this gadget */
  193.  
  194.     LONG MutualExclude;  /* obsolete */
  195.  
  196.     APTR SpecialInfo;
  197.  
  198.     UWORD GadgetID;
  199.     APTR UserData;
  200. };
  201.  
  202.  
  203. /* --- Gadget.Flags values --- */
  204. /* combinations in these bits describe the highlight technique to be used */
  205. #define GFLG_GADGHIGHBITS 0x0003
  206. #define GFLG_GADGHCOMP   0x0000  /* Complement the select box */
  207. #define GFLG_GADGHBOX   0x0001  /* Draw a box around the image */
  208. #define GFLG_GADGHIMAGE   0x0002  /* Blast in this alternate image */
  209. #define GFLG_GADGHNONE   0x0003  /* don't highlight */
  210.  
  211. #define GFLG_GADGIMAGE    0x0004  /* set if GadgetRender and SelectRender
  212.        * point to an Image structure, clear
  213.        * if they point to Border structures
  214.        */
  215. #define GFLG_RELBOTTOM   0x0008  /* vert. pos. is relative to bottom edge */
  216. #define GFLG_RELRIGHT   0x0010  /* horiz. pos. is relative to right edge */
  217. #define GFLG_RELWIDTH   0x0020  /* width is relative to req/window */
  218. #define GFLG_RELHEIGHT   0x0040  /* height is relative to req/window */
  219.  
  220. #define GFLG_SELECTED   0x0080  /* you may initialize and look at this */
  221.  
  222. /* the GFLG_DISABLED flag is initialized by you and later set by Intuition
  223.  * according to your calls to On/OffGadget().  It specifies whether or not
  224.  * this Gadget is currently disabled from being selected
  225.  */
  226. #define GFLG_DISABLED   0x0100
  227.  
  228. #define GFLG_LABELMASK   0x3000
  229. #define GFLG_LABELITEXT   0x0000  /* GadgetText points to IntuiText */
  230. #define GFLG_LABELSTRING  0x1000  /* GadgetText points to (UBYTE *) */
  231. #define GFLG_LABELIMAGE   0x2000  /* GadgetText points to Image (object) */
  232.  
  233. /* New for V37: GFLG_TABCYCLE */
  234. #define GFLG_TABCYCLE   0x0200  /* (string or custom) gadget participates in
  235.        * cycling activation with Tab or Shift-Tab
  236.        */
  237. /* New for V37: GFLG_STRINGEXTEND.  We discovered that V34 doesn't properly
  238.  * ignore the value we had chosen for the Gadget->Activation flag
  239.  * GACT_STRINGEXTEND.  NEVER SET THAT FLAG WHEN RUNNING UNDER V34.
  240.  * The Gadget->Flags bit GFLG_STRINGEXTEND is provided as a synonym which is
  241.  * safe under V34, and equivalent to GACT_STRINGEXTEND under V37.
  242.  * (Note that the two flags are not numerically equal)
  243.  */
  244. #define GFLG_STRINGEXTEND 0x0400  /* this String Gadget has StringExtend */
  245.  
  246. /* --- Gadget.Activation flag values --- */
  247. #define GACT_RELVERIFY   0x0001
  248. #define GACT_IMMEDIATE   0x0002
  249. #define GACT_ENDGADGET   0x0004
  250. #define GACT_FOLLOWMOUSE  0x0008
  251. #define GACT_RIGHTBORDER  0x0010
  252. #define GACT_LEFTBORDER   0x0020
  253. #define GACT_TOPBORDER   0x0040
  254. #define GACT_BOTTOMBORDER 0x0080
  255. #define GACT_BORDERSNIFF  0x8000
  256. #define GACT_TOGGLESELECT 0x0100
  257. #define GACT_BOOLEXTEND   0x2000
  258. /* should properly be in StringInfo, but aren't */
  259. #define GACT_STRINGLEFT   0x0000
  260. #define GACT_STRINGCENTER 0x0200
  261. #define GACT_STRINGRIGHT  0x0400
  262. #define GACT_LONGINT   0x0800
  263. #define GACT_ALTKEYMAP   0x1000
  264. #define GACT_STRINGEXTEND 0x2000
  265. #define GACT_ACTIVEGADGET 0x4000
  266. #define GTYP_GADGETTYPE 0xFC00 /* all Gadget Global Type flags (padded) */
  267. #define GTYP_SYSGADGET 0x8000 /* 1 = Allocated by the system, 0 = by app. */
  268. #define GTYP_SCRGADGET 0x4000 /* 1 = ScreenGadget, 0 = WindowGadget */
  269. #define GTYP_GZZGADGET 0x2000 /* 1 = for WFLG_GIMMEZEROZERO borders */
  270. #define GTYP_REQGADGET 0x1000 /* 1 = this is a Requester Gadget */
  271. /* system gadgets */
  272. #define GTYP_SIZING 0x0010
  273. #define GTYP_WDRAGGING 0x0020
  274. #define GTYP_SDRAGGING 0x0030
  275. #define GTYP_WUPFRONT 0x0040
  276. #define GTYP_SUPFRONT 0x0050
  277. #define GTYP_WDOWNBACK 0x0060
  278. #define GTYP_SDOWNBACK 0x0070
  279. #define GTYP_CLOSE 0x0080
  280. /* application gadgets */
  281. #define GTYP_BOOLGADGET 0x0001
  282. #define GTYP_GADGET0002 0x0002
  283. #define GTYP_PROPGADGET 0x0003
  284. #define GTYP_STRGADGET 0x0004
  285. #define GTYP_CUSTOMGADGET 0x0005
  286. #define GTYP_GTYPEMASK 0x0007 /* masks out to gadget class */
  287.  
  288. struct BoolInfo
  289. {
  290.     UWORD  Flags; /* defined below */
  291.     UWORD  *Mask; /* bit mask for highlighting and selecting
  292.     * mask must follow the same rules as an Image
  293.     * plane.  Its width and height are determined
  294.     * by the width and height of the gadget's
  295.     * select box. (i.e. Gadget.Width and .Height).
  296.     */
  297.     ULONG  Reserved; /* set to 0 */
  298. };
  299.  
  300. /* set BoolInfo.Flags to this flag bit.
  301.  * in the future, additional bits might mean more stuff hanging
  302.  * off of BoolInfo.Reserved.
  303.  */
  304. #define BOOLMASK 0x0001 /* extension is for masked gadget */
  305.  
  306. struct PropInfo
  307. {
  308.     UWORD Flags; /* general purpose flag bits (see defines below) */
  309.  
  310.     UWORD HorizPot; /* 16-bit FixedPoint horizontal quantity percentage */
  311.     UWORD VertPot; /* 16-bit FixedPoint vertical quantity percentage */
  312.  
  313.     UWORD HorizBody;  /* horizontal Body */
  314.     UWORD VertBody;  /* vertical Body */
  315.  
  316.     UWORD CWidth; /* Container width (with any relativity absoluted) */
  317.     UWORD CHeight; /* Container height (with any relativity absoluted) */
  318.     UWORD HPotRes, VPotRes; /* pot increments */
  319.     UWORD LeftBorder;  /* Container borders */
  320.     UWORD TopBorder;  /* Container borders */
  321. };
  322.  
  323.  
  324. /* --- FLAG BITS ---------------------------------------------------------- */
  325. #define AUTOKNOB 0x0001
  326. #define FREEHORIZ 0x0002 /* if set, the knob can move horizontally */
  327. #define FREEVERT 0x0004 /* if set, the knob can move vertically */
  328. #define PROPBORDERLESS 0x0008 /* if set, no border will be rendered */
  329. #define KNOBHIT  0x0100 /* set when this Knob is hit */
  330. #define PROPNEWLOOK 0x0010 /* set this if you want to get the new
  331.      * V36 look
  332.      */
  333.  
  334. #define KNOBHMIN 6 /* minimum horizontal size of the Knob */
  335. #define KNOBVMIN 4 /* minimum vertical size of the Knob */
  336. #define MAXBODY  0xFFFF /* maximum body value */
  337. #define MAXPOT   0xFFFF /* maximum pot value */
  338.  
  339.  
  340. struct StringInfo
  341. {
  342.     /* you initialize these variables, and then Intuition maintains them */
  343.     UBYTE *Buffer; /* the buffer containing the start and final string */
  344.     UBYTE *UndoBuffer; /* optional buffer for undoing current entry */
  345.     WORD BufferPos; /* character position in Buffer */
  346.     WORD MaxChars; /* max number of chars in Buffer (including NULL) */
  347.     WORD DispPos; /* Buffer position of first displayed character */
  348.  
  349.     /* Intuition initializes and maintains these variables for you */
  350.     WORD UndoPos; /* character position in the undo buffer */
  351.     WORD NumChars; /* number of characters currently in Buffer */
  352.     WORD DispCount; /* number of whole characters visible in Container */
  353.     WORD CLeft, CTop; /* topleft offset of the container */
  354.  
  355.     /* struct Layer *LayerPtr; --- obsolete --- */
  356.     struct StringExtend *Extension;
  357.  
  358.     /* you can initialize this variable before the gadget is submitted to
  359.      * Intuition, and then examine it later to discover what integer
  360.      * the user has entered (if the user never plays with the gadget,
  361.      * the value will be unchanged from your initial setting)
  362.      */
  363.     LONG LongInt;
  364.  
  365.     struct KeyMap *AltKeyMap;
  366. };
  367.  
  368. struct IntuiText
  369. {
  370.     UBYTE FrontPen, BackPen; /* the pen numbers for the rendering */
  371.     UBYTE DrawMode;  /* the mode for rendering the text */
  372.     WORD LeftEdge;  /* relative start location for the text */
  373.     WORD TopEdge;  /* relative start location for the text */
  374.     struct TextAttr *ITextFont; /* if NULL, you accept the default */
  375.     UBYTE *IText;  /* pointer to null-terminated text */
  376.     struct IntuiText *NextText; /* pointer to another IntuiText to render */
  377. };
  378.  
  379.  
  380.  
  381. struct Border
  382. {
  383.     WORD LeftEdge, TopEdge; /* initial offsets from the origin */
  384.     UBYTE FrontPen, BackPen; /* pens numbers for rendering */
  385.     UBYTE DrawMode;  /* mode for rendering */
  386.     BYTE Count;   /* number of XY pairs */
  387.     WORD *XY;   /* vector coordinate pairs rel to LeftTop */
  388.     struct Border *NextBorder; /* pointer to any other Border too */
  389. };
  390.  
  391.  
  392.  
  393. struct Image
  394. {
  395.     WORD LeftEdge;  /* starting offset relative to some origin */
  396.     WORD TopEdge;  /* starting offsets relative to some origin */
  397.     WORD Width;   /* pixel size (though data is word-aligned) */
  398.     WORD Height;
  399.     WORD Depth;   /* >= 0, for images you create  */
  400.     UWORD *ImageData;  /* pointer to the actual word-aligned bits */
  401.  
  402.     UBYTE PlanePick, PlaneOnOff;
  403.  
  404.     struct Image *NextImage;
  405. };
  406.  
  407.  
  408. struct IntuiMessage
  409. {
  410.     struct Message ExecMessage;
  411.  
  412.     ULONG Class;
  413.  
  414.     /* the Code field is for special values like MENU number */
  415.     UWORD Code;
  416.  
  417.     /* the Qualifier field is a copy of the current InputEvent's Qualifier */
  418.     UWORD Qualifier;
  419.  
  420.     /* IAddress contains particular addresses for Intuition functions, like
  421.      * the pointer to the Gadget or the Screen
  422.      */
  423.     APTR IAddress;
  424.  
  425.     WORD MouseX, MouseY;
  426.  
  427.     /* the time values are copies of the current system clock time.  Micros
  428.      * are in units of microseconds, Seconds in seconds.
  429.      */
  430.     ULONG Seconds, Micros;
  431.  
  432.     /* the IDCMPWindow variable will always have the address of the Window of
  433.      * this IDCMP
  434.      */
  435.     struct Window *IDCMPWindow;
  436.  
  437.     /* system-use variable */
  438.     struct IntuiMessage *SpecialLink;
  439. };
  440.  
  441.  
  442. /* --- IDCMP Classes ------------------------------------------------------ */
  443. /* Please refer to the Autodoc for OpenWindow() and to the Rom Kernel
  444.  * Manual for full details on the IDCMP classes.
  445.  */
  446. #define IDCMP_SIZEVERIFY 0x00000001
  447. #define IDCMP_NEWSIZE  0x00000002
  448. #define IDCMP_REFRESHWINDOW 0x00000004
  449. #define IDCMP_MOUSEBUTTONS 0x00000008
  450. #define IDCMP_MOUSEMOVE  0x00000010
  451. #define IDCMP_GADGETDOWN 0x00000020
  452. #define IDCMP_GADGETUP  0x00000040
  453. #define IDCMP_REQSET  0x00000080
  454. #define IDCMP_MENUPICK  0x00000100
  455. #define IDCMP_CLOSEWINDOW 0x00000200
  456. #define IDCMP_RAWKEY  0x00000400
  457. #define IDCMP_REQVERIFY  0x00000800
  458. #define IDCMP_REQCLEAR  0x00001000
  459. #define IDCMP_MENUVERIFY 0x00002000
  460. #define IDCMP_NEWPREFS  0x00004000
  461. #define IDCMP_DISKINSERTED 0x00008000
  462. #define IDCMP_DISKREMOVED 0x00010000
  463. #define IDCMP_WBENCHMESSAGE 0x00020000  /* System use only  */
  464. #define IDCMP_ACTIVEWINDOW 0x00040000
  465. #define IDCMP_INACTIVEWINDOW 0x00080000
  466. #define IDCMP_DELTAMOVE  0x00100000
  467. #define IDCMP_VANILLAKEY 0x00200000
  468. #define IDCMP_INTUITICKS 0x00400000
  469. /*  for notifications from "boopsi" gadgets */
  470. #define IDCMP_IDCMPUPDATE 0x00800000  /* new for V36 */
  471. /* for getting help key report during menu session */
  472. #define IDCMP_MENUHELP  0x01000000  /* new for V36 */
  473. /* for notification of any move/size/zoom/change window  */
  474. #define IDCMP_CHANGEWINDOW 0x02000000  /* new for V36 */
  475.  
  476. /* NOTEZ-BIEN:    0x80000000 is reserved for internal use   */
  477.  
  478. #define IDCMP_LONELYMESSAGE 0x80000000
  479.  
  480.  
  481. /* --- IDCMP Codes -------------------------------------------------------- */
  482. /* This group of codes is for the IDCMP_MENUVERIFY function */
  483. #define MENUHOT  0x0001 /* IntuiWants verification or MENUCANCEL    */
  484. #define MENUCANCEL 0x0002 /* HOT Reply of this cancels Menu operation */
  485. #define MENUWAITING 0x0003 /* Intuition simply wants a ReplyMsg() ASAP */
  486.  
  487. /* These are internal tokens to represent state of verification attempts
  488.  * shown here as a clue.
  489.  */
  490. #define OKOK  MENUHOT /* guy didn't care   */
  491. #define OKABORT  0x0004 /* window rendered question moot */
  492. #define OKCANCEL MENUCANCEL /* window sent cancel reply  */
  493.  
  494. /* This group of codes is for the IDCMP_WBENCHMESSAGE messages */
  495. #define WBENCHOPEN 0x0001
  496. #define WBENCHCLOSE 0x0002
  497.  
  498.  
  499. /* A data structure common in V36 Intuition processing */
  500. struct IBox {
  501.     WORD Left;
  502.     WORD Top;
  503.     WORD Width;
  504.     WORD Height;
  505.     };
  506.  
  507.  
  508. struct Window
  509. {
  510.     struct Window *NextWindow;  /* for the linked list in a screen */
  511.  
  512.     WORD LeftEdge, TopEdge;  /* screen dimensions of window */
  513.     WORD Width, Height;   /* screen dimensions of window */
  514.  
  515.     WORD MouseY, MouseX;  /* relative to upper-left of window */
  516.  
  517.     WORD MinWidth, MinHeight;  /* minimum sizes */
  518.     UWORD MaxWidth, MaxHeight;  /* maximum sizes */
  519.  
  520.     ULONG Flags;   /* see below for defines */
  521.  
  522.     struct Menu *MenuStrip;  /* the strip of Menu headers */
  523.  
  524.     UBYTE *Title;   /* the title text for this window */
  525.  
  526.     struct Requester *FirstRequest; /* all active Requesters */
  527.  
  528.     struct Requester *DMRequest; /* double-click Requester */
  529.  
  530.     WORD ReqCount;   /* count of reqs blocking Window */
  531.  
  532.     struct Screen *WScreen;  /* this Window's Screen */
  533.     struct RastPort *RPort;  /* this Window's very own RastPort */
  534.  
  535.     BYTE BorderLeft, BorderTop, BorderRight, BorderBottom;
  536.     struct RastPort *BorderRPort;
  537.  
  538.     struct Gadget *FirstGadget;
  539.  
  540.     /* these are for opening/closing the windows */
  541.     struct Window *Parent, *Descendant;
  542.  
  543.     /* sprite data information for your own Pointer
  544.      * set these AFTER you Open the Window by calling SetPointer()
  545.      */
  546.     UWORD *Pointer; /* sprite data */
  547.     BYTE PtrHeight; /* sprite height (not including sprite padding) */
  548.     BYTE PtrWidth; /* sprite width (must be less than or equal to 16) */
  549.     BYTE XOffset, YOffset; /* sprite offsets */
  550.  
  551.     /* the IDCMP Flags and User's and Intuition's Message Ports */
  552.     ULONG IDCMPFlags; /* User-selected flags */
  553.     struct MsgPort *UserPort, *WindowPort;
  554.     struct IntuiMessage *MessageKey;
  555.  
  556.     UBYTE DetailPen, BlockPen; /* for bar/border/gadget rendering */
  557.  
  558.     struct Image *CheckMark;
  559.  
  560.     UBYTE *ScreenTitle; /* if non-null, Screen title when Window is active */
  561.  
  562.     WORD GZZMouseX;
  563.     WORD GZZMouseY;
  564.     /* these variables contain the width and height of the inner-Window of
  565.      * WFLG_GIMMEZEROZERO Windows
  566.      */
  567.     WORD GZZWidth;
  568.     WORD GZZHeight;
  569.  
  570.     UBYTE *ExtData;
  571.  
  572.     BYTE *UserData; /* general-purpose pointer to User data extension */
  573.  
  574.     /** 11/18/85: this pointer keeps a duplicate of what
  575.      * Window.RPort->Layer is _supposed_ to be pointing at
  576.      */
  577.     struct Layer *WLayer;
  578.  
  579.     /* NEW 1.2: need to keep track of the font that
  580.      * OpenWindow opened, in case user SetFont's into RastPort
  581.      */
  582.     struct TextFont *IFont;
  583.  
  584.     /* (V36) another flag word (the Flags field is used up).
  585.      * At present, all flag values are system private.
  586.      * Until further notice, you may not change nor use this field.
  587.      */
  588.     ULONG MoreFlags;
  589.  
  590.     /**** Data beyond this point are Intuition Private.  DO NOT USE ****/
  591. };
  592.  
  593.  
  594. /* --- Flags requested at OpenWindow() time by the application --------- */
  595. #define WFLG_SIZEGADGET     0x00000001 /* include sizing system-gadget? */
  596. #define WFLG_DRAGBAR     0x00000002 /* include dragging system-gadget? */
  597. #define WFLG_DEPTHGADGET    0x00000004 /* include depth arrangement gadget? */
  598. #define WFLG_CLOSEGADGET    0x00000008 /* include close-box system-gadget? */
  599.  
  600. #define WFLG_SIZEBRIGHT     0x00000010 /* size gadget uses right border */
  601. #define WFLG_SIZEBBOTTOM    0x00000020 /* size gadget uses bottom border */
  602.  
  603. /* --- refresh modes ------------------------------------------------------ */
  604. /* combinations of the WFLG_REFRESHBITS select the refresh type */
  605. #define WFLG_REFRESHBITS    0x000000C0
  606. #define WFLG_SMART_REFRESH  0x00000000
  607. #define WFLG_SIMPLE_REFRESH 0x00000040
  608. #define WFLG_SUPER_BITMAP   0x00000080
  609. #define WFLG_OTHER_REFRESH  0x000000C0
  610.  
  611. #define WFLG_BACKDROP     0x00000100 /* this is a backdrop window */
  612.  
  613. #define WFLG_REPORTMOUSE    0x00000200 /* to hear about every mouse move */
  614.  
  615. #define WFLG_GIMMEZEROZERO  0x00000400 /* a GimmeZeroZero window */
  616.  
  617. #define WFLG_BORDERLESS     0x00000800 /* to get a Window sans border */
  618.  
  619. #define WFLG_ACTIVATE     0x00001000 /* when Window opens, it's Active */
  620.  
  621.  
  622. /* FLAGS SET BY INTUITION */
  623. #define WFLG_WINDOWACTIVE   0x00002000 /* this window is the active one */
  624. #define WFLG_INREQUEST     0x00004000 /* this window is in request mode */
  625. #define WFLG_MENUSTATE     0x00008000 /* Window is active with Menus on */
  626.  
  627. /* --- Other User Flags --------------------------------------------------- */
  628. #define WFLG_RMBTRAP     0x00010000 /* Catch RMB events for your own */
  629. #define WFLG_NOCAREREFRESH  0x00020000 /* not to be bothered with REFRESH */
  630.  
  631. /* --- Other Intuition Flags ---------------------------------------------- */
  632. #define WFLG_WINDOWREFRESH  0x01000000 /* Window is currently refreshing */
  633. #define WFLG_WBENCHWINDOW   0x02000000 /* WorkBench tool ONLY Window */
  634. #define WFLG_WINDOWTICKED   0x04000000 /* only one timer tick at a time */
  635.  
  636.  
  637. /* - V36 new Flags which the programmer may specify in NewWindow.Flags */
  638. #define WFLG_NW_EXTENDED    0x00040000 /* extension data provided */
  639.      /* see struct ExtNewWindow */
  640.  
  641. /* --- V36 Flags to be set only by Intuition ------------------------- */
  642. #define WFLG_VISITOR     0x08000000 /* visitor window  */
  643. #define WFLG_ZOOMED     0x10000000 /* identifies "zoom state" */
  644. #define WFLG_HASZOOM     0x20000000 /* windowhas a zoom gadget */
  645.  
  646. /* --- Other Window Values ---------------------------------------------- */
  647. #define DEFAULTMOUSEQUEUE (5) /* no more mouse messages */
  648.  
  649. /* --- see struct IntuiMessage for the IDCMP Flag definitions ------------- */
  650.  
  651.  
  652. struct NewWindow
  653. {
  654.     WORD LeftEdge, TopEdge;  /* screen dimensions of window */
  655.     WORD Width, Height;   /* screen dimensions of window */
  656.  
  657.     UBYTE DetailPen, BlockPen;  /* for bar/border/gadget rendering */
  658.  
  659.     ULONG IDCMPFlags;   /* User-selected IDCMP flags */
  660.  
  661.     ULONG Flags;   /* see Window struct for defines */
  662.  
  663.     struct Gadget *FirstGadget;
  664.  
  665.     struct Image *CheckMark;
  666.  
  667.     UBYTE *Title;     /* the title text for this window */
  668.  
  669.     struct Screen *Screen;
  670.  
  671.     struct BitMap *BitMap;
  672.  
  673.     WORD MinWidth, MinHeight;     /* minimums */
  674.     UWORD MaxWidth, MaxHeight;      /* maximums */
  675.  
  676.     UWORD Type;
  677.  
  678. };
  679.  
  680. struct ExtNewWindow
  681. {
  682.     WORD LeftEdge, TopEdge;
  683.     WORD Width, Height;
  684.  
  685.     UBYTE DetailPen, BlockPen;
  686.     ULONG IDCMPFlags;
  687.     ULONG Flags;
  688.     struct Gadget *FirstGadget;
  689.  
  690.     struct Image *CheckMark;
  691.  
  692.     UBYTE *Title;
  693.     struct Screen *Screen;
  694.     struct BitMap *BitMap;
  695.  
  696.     WORD MinWidth, MinHeight;
  697.     UWORD MaxWidth, MaxHeight;
  698.  
  699.     UWORD Type;
  700.  
  701.     struct TagItem *Extension;
  702. };
  703.  
  704.  
  705. #define WA_Dummy (TAG_USER + 99) /* 0x80000063 */
  706.  
  707. /* these tags simply override NewWindow parameters */
  708. #define WA_Left   (WA_Dummy + 0x01)
  709. #define WA_Top   (WA_Dummy + 0x02)
  710. #define WA_Width  (WA_Dummy + 0x03)
  711. #define WA_Height  (WA_Dummy + 0x04)
  712. #define WA_DetailPen  (WA_Dummy + 0x05)
  713. #define WA_BlockPen  (WA_Dummy + 0x06)
  714. #define WA_IDCMP  (WA_Dummy + 0x07)
  715.    /* "bulk" initialization of NewWindow.Flags */
  716. #define WA_Flags  (WA_Dummy + 0x08)
  717. #define WA_Gadgets  (WA_Dummy + 0x09)
  718. #define WA_Checkmark  (WA_Dummy + 0x0A)
  719. #define WA_Title  (WA_Dummy + 0x0B)
  720.    /* means you don't have to call SetWindowTitles
  721.     * after you open your window
  722.     */
  723. #define WA_ScreenTitle  (WA_Dummy + 0x0C)
  724. #define WA_CustomScreen  (WA_Dummy + 0x0D)
  725. #define WA_SuperBitMap  (WA_Dummy + 0x0E)
  726.    /* also implies WFLG_SUPER_BITMAP property */
  727. #define WA_MinWidth  (WA_Dummy + 0x0F)
  728. #define WA_MinHeight  (WA_Dummy + 0x10)
  729. #define WA_MaxWidth  (WA_Dummy + 0x11)
  730. #define WA_MaxHeight  (WA_Dummy + 0x12)
  731.  
  732. /* The following are specifications for new features */
  733.  
  734. #define WA_InnerWidth  (WA_Dummy + 0x13)
  735. #define WA_InnerHeight  (WA_Dummy + 0x14)
  736.  
  737. #define WA_PubScreenName (WA_Dummy + 0x15)
  738. #define WA_PubScreen  (WA_Dummy + 0x16)
  739. #define WA_PubScreenFallBack (WA_Dummy + 0x17)
  740. #define WA_WindowName  (WA_Dummy + 0x18)
  741. #define WA_Colors  (WA_Dummy + 0x19)
  742. #define WA_Zoom  (WA_Dummy + 0x1A)
  743. #define WA_MouseQueue  (WA_Dummy + 0x1B)
  744. #define WA_BackFill  (WA_Dummy + 0x1C)
  745. #define WA_RptQueue  (WA_Dummy + 0x1D)
  746. #define WA_SizeGadget  (WA_Dummy + 0x1E)
  747. #define WA_DragBar  (WA_Dummy + 0x1F)
  748. #define WA_DepthGadget  (WA_Dummy + 0x20)
  749. #define WA_CloseGadget  (WA_Dummy + 0x21)
  750. #define WA_Backdrop  (WA_Dummy + 0x22)
  751. #define WA_ReportMouse  (WA_Dummy + 0x23)
  752. #define WA_NoCareRefresh (WA_Dummy + 0x24)
  753. #define WA_Borderless  (WA_Dummy + 0x25)
  754. #define WA_Activate  (WA_Dummy + 0x26)
  755. #define WA_RMBTrap  (WA_Dummy + 0x27)
  756. #define WA_WBenchWindow  (WA_Dummy + 0x28) /* PRIVATE!! */
  757. #define WA_SimpleRefresh (WA_Dummy + 0x29)
  758.    /* only specify if TRUE */
  759. #define WA_SmartRefresh  (WA_Dummy + 0x2A)
  760.    /* only specify if TRUE */
  761. #define WA_SizeBRight  (WA_Dummy + 0x2B)
  762. #define WA_SizeBBottom  (WA_Dummy + 0x2C)
  763.  
  764.     /* New Boolean properties */
  765. #define WA_AutoAdjust  (WA_Dummy + 0x2D)
  766. #define WA_GimmeZeroZero (WA_Dummy + 0x2E)
  767.    /* equiv. to NewWindow.Flags WFLG_GIMMEZEROZERO */
  768.  
  769. /* New for V37: WA_MenuHelp (ignored by V36) */
  770. #define WA_MenuHelp  (WA_Dummy + 0x2F)
  771.  
  772.  
  773.  
  774. #ifndef INTUITION_SCREENS_H
  775. #include <intuition/screens.h>
  776. #endif
  777.  
  778. #ifndef INTUITION_PREFERENCES_H
  779. #include <intuition/preferences.h>
  780. #endif
  781.  
  782. struct Remember
  783. {
  784.     struct Remember *NextRemember;
  785.     ULONG RememberSize;
  786.     UBYTE *Memory;
  787. };
  788.  
  789.  
  790. /* === Color Spec ====================================================== */
  791. /* How to tell Intuition about RGB values for a color table entry. */
  792. struct ColorSpec {
  793.     WORD ColorIndex; /* -1 terminates an array of ColorSpec */
  794.     UWORD Red;  /* only 6 bits recognized in V36 */
  795.     UWORD Green;  /* only 6 bits recognized in V36 */
  796.     UWORD Blue;  /* only 6 bits recognized in V36 */
  797. };
  798.  
  799. struct EasyStruct {
  800.     ULONG es_StructSize;
  801.     ULONG es_Flags;
  802.     UBYTE *es_Title;
  803.     UBYTE *es_TextFormat;
  804.     UBYTE *es_GadgetFormat;
  805. };
  806.  
  807.  
  808.  
  809. /* === Miscellaneous ====================================================== */
  810.  
  811. #define MENUNUM(n) (n & 0x1F)
  812. #define ITEMNUM(n) ((n >> 5) & 0x003F)
  813. #define SUBNUM(n) ((n >> 11) & 0x001F)
  814.  
  815. #define SHIFTMENU(n) (n & 0x1F)
  816. #define SHIFTITEM(n) ((n & 0x3F) << 5)
  817. #define SHIFTSUB(n) ((n & 0x1F) << 11)
  818.  
  819. #define FULLMENUNUM( menu, item, sub ) \
  820.  ( SHIFTSUB(sub) | SHIFTITEM(item) | SHIFTMENU(menu) )
  821.  
  822. #define SRBNUM(n)    (0x08 - (n >> 4)) /* SerRWBits -> read bits per char */
  823. #define SWBNUM(n)    (0x08 - (n & 0x0F))/* SerRWBits -> write bits per chr */
  824. #define SSBNUM(n)    (0x01 + (n >> 4)) /* SerStopBuf -> stop bits per chr */
  825. #define SPARNUM(n)   (n >> 4)  /* SerParShk -> parity setting   */
  826. #define SHAKNUM(n)   (n & 0x0F) /* SerParShk -> handshake mode   */
  827.  
  828.  
  829. /* = MENU STUFF =========================================================== */
  830. #define NOMENU 0x001F
  831. #define NOITEM 0x003F
  832. #define NOSUB  0x001F
  833. #define MENUNULL 0xFFFF
  834.  
  835. /* = =RJ='s peculiarities ================================================= */
  836. #define FOREVER for(;;)
  837. #define SIGN(x) ( ((x) > 0) - ((x) < 0) )
  838. #define NOT !
  839.  
  840. #define CHECKWIDTH 19
  841. #define COMMWIDTH 27
  842. #define LOWCHECKWIDTH 13
  843. #define LOWCOMMWIDTH 16
  844.  
  845.  
  846. #define ALERT_TYPE 0x80000000
  847. #define RECOVERY_ALERT 0x00000000 /* the system can recover from this */
  848. #define DEADEND_ALERT 0x80000000 /* no recovery possible, this is it */
  849.  
  850. #define AUTOFRONTPEN 0
  851. #define AUTOBACKPEN 1
  852. #define AUTODRAWMODE JAM2
  853. #define AUTOLEFTEDGE 6
  854. #define AUTOTOPEDGE 3
  855. #define AUTOITEXTFONT NULL
  856. #define AUTONEXTTEXT NULL
  857.  
  858. #define SELECTUP (IECODE_LBUTTON | IECODE_UP_PREFIX)
  859. #define SELECTDOWN (IECODE_LBUTTON)
  860. #define MENUUP  (IECODE_RBUTTON | IECODE_UP_PREFIX)
  861. #define MENUDOWN (IECODE_RBUTTON)
  862. #define MIDDLEDOWN (IECODE_MBUTTON)
  863. #define MIDDLEUP (IECODE_MBUTTON | IECODE_UP_PREFIX)
  864. #define ALTLEFT  (IEQUALIFIER_LALT)
  865. #define ALTRIGHT (IEQUALIFIER_RALT)
  866. #define AMIGALEFT (IEQUALIFIER_LCOMMAND)
  867. #define AMIGARIGHT (IEQUALIFIER_RCOMMAND)
  868. #define AMIGAKEYS (AMIGALEFT | AMIGARIGHT)
  869.  
  870. #define CURSORUP 0x4C
  871. #define CURSORLEFT 0x4F
  872. #define CURSORRIGHT 0x4E
  873. #define CURSORDOWN 0x4D
  874. #define KEYCODE_Q 0x10
  875. #define KEYCODE_Z 0x31
  876. #define KEYCODE_X 0x32
  877. #define KEYCODE_V 0x34
  878. #define KEYCODE_B 0x35
  879. #define KEYCODE_N 0x36
  880. #define KEYCODE_M 0x37
  881. #define KEYCODE_LESS 0x38
  882. #define KEYCODE_GREATER 0x39
  883.  
  884. /* Include obsolete identifiers: */
  885. #ifndef INTUITION_IOBSOLETE_H
  886. #include <intuition/iobsolete.h>
  887. #endif
  888.  
  889. #endif
  890.